// 封装 axios
import axios from 'axios'
import store from '@/store'
import { ElMessage } from 'element-plus'
import { isCheckTimeout } from '@/utils/auth'
const service = axios.create({
  // 获取 .env 开头的文件里的url地址 也就是 /api
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000
})
// 请求拦截器
service.interceptors.request.use(
  config => {
    // 在这个位置需要统一的去注入token
    if (store.getters.token) {
      // 判断时间戳是否存在
      if (isCheckTimeout()) {
        // 返回为true执行退出操作
        store.dispatch('user/logout')
        return Promise.reject(new Error('token失效了'))
      }
      // 如果token存在 注入token
      config.headers.Authorization = `Bearer ${store.getters.token}`
    }
    return config // 必须返回配置
  },
  error => {
    return Promise.reject(error)
  }
)

// 添加响应拦截器
service.interceptors.response.use(response => {
  // console.log(response.data)
  const { code, message } = response.data
  // 判断请求是否成功
  // console.log(response.data)
  // 在这里判断code值 进行处理
  if (code === '00000') {
    // 成功返回解析后的数据
    return response.data
  } else {
    // 失败（请求成功没业务失败）消息提示
    ElMessage.error(message)
    return Promise.reject(new Error(message))
  }
},
  // 请求失败
  error => {
    // token过期
    if (error.response && error.response.data && error.response.data.code === 401) {
      store.dispatch('user/logout')
    }
    ElMessage.error(error.message)
    return Promise.reject(error)
  }
)
export default service
